import { OrderSource, OrderStatus, PayMode } from '../enums'
import type { Ref } from 'vue'

/**
 * @description 支付方法参数
 * @params {string} - orderSource  订单来源
 * @params {Ref(number)} - settleMode  支付类型
 * @params {string} - returnUrl  回调地址
 * @params {string} - orderSn  订单id
 * @params {string} - orderSns  购物车订单id
 */
export interface PayOption {
  /** 订单来源 */
  orderSource: OrderSource
  /** 支付类型 */
  settleMode: Ref<PayMode>
  /** 回调地址 */
  returnUrl?: string
  /** 订单id */
  orderSn?: string | undefined
  /** 购物车订单id */
  orderSns?: Ref<string[]> | undefined
  /** 微信openId  小程序支付 和 jsapi支付必填 */
  openId?: string

  [key: string]: any
}

/**
 * @description 支付信息接口
 */
export interface PayInfo {
  /**
   * 支付信息（二维码）
   * @type {string}
   * @required
   */
  payInfo: string

  /**
   * 应用ID
   * @type {string}
   * @optional
   */
  appId?: string

  /**
   * 商户ID
   * @type {string}
   * @optional
   */
  partnerId?: string

  /**
   * 时间戳（毫秒）
   * @type {string}
   * @optional
   */
  timestamp?: string

  /**
   * 购物车订单号
   * @type {string}
   * @optional
   */
  orderSns?: string

  /**
   * 订单号
   * @type {string}
   * @optional
   */
  orderSn?: string

  /**
   * 固定值Sign=WXPay
   * @type {string}
   * @optional
   */
  packageStr?: string

  /**
   * 随机字符串
   * @type {string}
   * @optional
   */
  nonceStr?: string

  /**
   * 签名值
   * @type {string}
   * @optional
   */
  sign?: string

  /**
   * 结算方式
   * @type {number}
   * @optional
   * @enum {1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10}
   * 1: "阿里app支付",
   * 2: "微信app支付",
   * 3: "阿里当面付",
   * 4: "微信Native支付",
   * 5: "全付通支付",
   * 6: "微信jsapi支付",
   * 7: "微信h5支付",
   * 8: "微信小程序支付",
   * 9: "阿里电脑网站支付",
   * 10: "阿里手机网站支付"
   */
  settleMode: PayMode
}

/**
 * 根据产品线 ID 获取产品线信息
 */
export interface ProductInfoResult {
  /** 产品线 ID */
  id: string

  /** 产品类型数组 */
  productTypes: number[]

  /** 产品端类型 */
  item: number

  /** 产品线类型, 1: 新增产品线, 2: 虚拟产品线 */
  type: number

  /** 使用的 ID */
  usedId: number

  /** Logo 1 */
  logo: string

  /** Logo 2 */
  logo2: string

  /** PC 域名 */
  pcDomain: string

  /** H5 域名 */
  h5Domain: string

  /** 小程序域名 */
  miniDomain: string
}

/**
 * 获取订单中的商品信息，包含用户信息
 */
export interface OrderInfoParams {
  /** 订单编号  */
  orderSn?: string | undefined

  /** 购物车订单编号  */
  orderSns?: string | string[] | undefined

  /** 订单编号  */
  orderSource: OrderSource
}

/**
 * 获取订单中的商品信息，包含用户信息
 */
export interface OrderInfoTypeResult {
  /** 订单号  */
  orderSn: string

  /** 订单状态
   * @type {number}
   * @optional
   *  @enum {1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10| 11| 12| 13}
   *  4: 待支付,
   *  8: 待收货,
   *  9: 已完成,
   *  10: 已关闭,
   *  20: 退款待审核,
   *  14: 退款审核中,
   *  15: 退款审核通过,
   *  16: 退款审核驳回,
   *  22: 转班待审核,
   *  11: 转班审核中,
   *  12: 转班审核通过,
   *  13: 转班审核驳回
  
   */
  orderStatus: OrderStatus

  /** 用户头像地址  */
  photo: string

  /** 个人头像  */
  personalPhoto?: string

  /** 订单过期时间  */
  remainingExpireTime: number

  /** 应付金额  */
  shouldPay?: number

  /** 用户 ID  */
  userId?: string

  /** 用户名  */
  userName?: string

  /** 普通订单类型  */
  orderType: number

  /** 购物车订单号  */
  orderSns?: string[]

  /** 购物车商品标题  */
  goodsTitles?: string[]

  /** 非零订单号  */
  nonZeroOrderSns?: string[]
}

/**
 * 用户信息接口
 */
export interface UserType {
  /** 用户 ID  */
  userId?: string

  /** 用户名  */
  userName: string

  /** 身份
   *  1: 团长;
   *  2: 团员
   */
  identity: string

  /** 用户头像地址  */
  photo: string
}

/**
 * 拼团状态接口
 */
export interface GroupTeamStatusType {
  /** 拼团状态
   *  1: 开团成功;
   *  2: 参团成功;
   *  3: 拼团成功
   */
  groupStatus: number

  /** 拼团活动倒计时  */
  countDown: number

  /** 还余几人成团  */
  residueBoughtSum: string

  /** 用户列表  */
  users: UserType[]
}

/**
 * 主要订单商品信息接口
 */
export interface MajorOrderGoodsType {
  /** 项目 ID  */
  cateIds?: string

  /** 项目名称  */
  cateNames?: string

  /** 科目 ID  */
  subjectIds?: string

  /** 科目名称  */
  subjectNames?: string

  /** 商品名称  */
  goodsTitle?: string

  /** 商品 ID  */
  goodsMasterId?: string

  /** 商品类型  */
  resourceTypes?: number

  /** 商品类型名称  */
  resourceTypeNames?: string

  /** 商品类型列表  */
  resourceTypesList: number[]
}

/**
 * 支付信息接口请求
 */

export interface PaymentInfoTypeParams {
  /** 支付单号
   *  参数二传一，不可同时为空
   */
  paymentSn?: string

  /** 订单编号
   *  参数二传一，不可同时为空
   */
  orderSn?: string

  /** 订单编号多个
   *  与 paymentSn 二传一，不可同时为空
   */
  orderSns?: string[]
}

/**
 * 支付信息接口
 */
export interface PaymentInfoTypeResult {
  /** 状态码
   *  10000: 正常,
   *  15147: 已更新,
   *  15148: 被支付,
   *  15151: 二维码已过期
   */
  code: string

  /** 错误信息  */
  msg: string

  /** 订单编号  */
  orderSn?: string

  /** 应收金额  */
  shouldPay?: number

  /** 实收金额  */
  actualPrice?: number

  /** 本次缴费金额  */
  paymentMoney?: number

  /** 支付方式
   *  1: 支付宝;
   *  2: 微信
   */
  paymentType: string

  /** 支付方式名称  */
  paymentTypeName: string

  /** 结算方式  */
  settleMode: number

  /** 用户名称  */
  userName?: string

  /** 手机号  */
  userMobile?: string

  /** 订单类型
   *  0: 正常订单;
   *  2: 转班订单
   */
  orderType?: number

  /** 订单类型描述  */
  orderTypeName?: string

  /** 订单状态
   *  4: 未付款;
   *  5: 已取消;
   *  7: 待发货;
   *  8: 待收货;
   *  9: 已完成;
   *  10: 已关闭;
   *  20: 退款待审核;
   *  21: 退款审核中;
   *  15: 退款审核通过;
   *  16: 退款审核驳回;
   *  22: 转班待审核;
   *  11: 转班审核中;
   *  12: 转班审核通过;
   *  13: 转班审核驳回
   */
  orderStatus?: OrderStatus

  /** 订单状态描述  */
  orderStatusName?: string

  /** 拼团状态  */
  groupTeamStatus?: GroupTeamStatusType

  /** 主要订单商品列表  */
  majorOrderGoodsList: MajorOrderGoodsType[]
  resourceTypesList: number[]
}

/**
 * @description 获取是否配置支付类型的信息
 */
export interface PaymentTypeParams {
  /**
   * 产品线id
   */
  usedId: string
  /**
   * 支付方式
   */
  settleMode: PayMode
}
/**
 * @description 获取是否配置支付类型的信息
 */
export interface PaymentTypeResult {
  /**
   * 微信配置状态,0:未配置,1:已配置
   */
  wxConfigStatus: number
  /**
   * 支付宝配置状态,0:未配置,1:已配置
   */
  alipayConfigStatus: number
}

/**
 * @description 获取主题色
 */
export interface ThemeSettingsResult {
  /**
   * 全站主色类型：1 表示系统推荐，2 表示自定义
   * */
  wholeStationEssentialColour: 1 | 2

  /**
   * 系统推荐的全站颜色 (只有在 wholeStationEssentialColour 为 1 时使用)
   * */
  wholeStationColour: string

  /**
   * 自定义的全站颜色 (只有在 wholeStationEssentialColour 为 2 时使用)
   * */
  wholeStationColourCustom: string
}
